-- Network Working Group                                     C. Kalbfleisch
-- Request for Comments: 4149                                    Consultant
-- Category: Standards Track                                        R. Cole
--                                                                  JHU/APL
--                                                             D. Romascanu
--                                                                    Avaya
--                                                              August 2005


--         Definition of Managed Objects for Synthetic Sources for
--                    Performance Monitoring Algorithms

   SSPM-MIB DEFINITIONS ::= BEGIN

      IMPORTS

          MODULE-IDENTITY, OBJECT-TYPE,
          Counter32, Integer32, Unsigned32
                                      FROM SNMPv2-SMI  --[RFC2578]

          TEXTUAL-CONVENTION, StorageType,
          TruthValue, RowStatus
                                      FROM SNMPv2-TC  --[RFC2579]

          MODULE-COMPLIANCE, OBJECT-GROUP
                                      FROM SNMPv2-CONF --[RFC2578,
                                                       -- RFC2579,
                                                       -- RFC2580]
          OwnerString, rmon
                                      FROM RMON-MIB  --[RFC2819]

          InetAddressType, InetAddress
                                      FROM INET-ADDRESS-MIB  --[RFC3291]

          InterfaceIndexOrZero
                                      FROM IF-MIB  --[RFC2863]

          AppLocalIndex
                                      FROM APM-MIB  --[RFC3729]

          Utf8String
                                      FROM SYSAPPL-MIB;  --[RFC2287]

      sspmMIB MODULE-IDENTITY
          LAST-UPDATED "200507280000Z"  -- July 28, 2005
          ORGANIZATION "IETF RMON MIB working group"
          CONTACT-INFO
              "        Carl W. Kalbfleisch
                       Consultant

               E-mail: ietf@kalbfleisch.us

               Working group mailing list: rmonmib@ietf.org
               To subscribe send email to rmonmib-request@ietf.org"
          DESCRIPTION
              "This SSPM MIB module is applicable to probes
               implementing Synthetic Source for Performance
               Monitoring functions.

               Copyright (C) The Internet Society (2005).  This version
               of this MIB module is part of RFC 4149; see the RFC
               itself for full legal notices."

             -- revision history

             REVISION    "200507280000Z"   -- July 28, 2005
             DESCRIPTION
                 "The original version of this MIB module,
                 was published as RFC4149."
             ::= { rmon 28 }

   --
   -- Object Identifier Assignments
   --
   sspmMIBObjects       OBJECT IDENTIFIER ::= { sspmMIB 1 }
   sspmMIBNotifications OBJECT IDENTIFIER ::= { sspmMIB 2 }
   sspmMIBConformance   OBJECT IDENTIFIER ::= { sspmMIB 3 }

   --
   -- Textual Conventions
   --
   SspmMicroSeconds ::= TEXTUAL-CONVENTION
       DISPLAY-HINT "d"
       STATUS current
       DESCRIPTION
           "A unit of time with resolution of MicroSeconds."
       SYNTAX Unsigned32

   SspmClockSource ::= TEXTUAL-CONVENTION
       DISPLAY-HINT "d"
       STATUS current
       DESCRIPTION
           "An indication of the source of the clock as defined by the
            NTP specification RFC1305 [RFC1305] definition of stratum:

            Stratum (sys.stratum, peer.stratum, pkt.stratum): This is
            an integer indicating the stratum of the local clock,
            with values defined as follows:

            0      unspecified

            1      primary reference (e.g., calibrated atomic clock,
                   radio clock)

            2-255  secondary reference (via NTP)."
       REFERENCE
           "RFC1305."
       SYNTAX Integer32 (0..255)

   SspmClockMaxSkew ::= TEXTUAL-CONVENTION
       DISPLAY-HINT "d"
       STATUS current
       -- UNITS "Seconds"
       DESCRIPTION
           "An indication of the accuracy of the clock as defined by
            RFC1305.  This variable indicates the maximum offset
            error due to skew of the local clock over the
            time interval 86400 seconds, in seconds."
       REFERENCE
           "RFC1305."
       SYNTAX Integer32 (1..65535)

   --
   -- sspmGeneral
   --
   sspmGeneral           OBJECT IDENTIFIER ::= { sspmMIBObjects 1 }
   sspmGeneralClockResolution OBJECT-TYPE
       SYNTAX      SspmMicroSeconds
       MAX-ACCESS  read-only
       STATUS      current
       -- UNITS       Microseconds
       DESCRIPTION
           "A read-only variable indicating the resolution
         of the measurements possible by this device."
       ::= { sspmGeneral 1 }

   sspmGeneralClockMaxSkew OBJECT-TYPE
       SYNTAX SspmClockMaxSkew
       MAX-ACCESS read-only
       STATUS current
       -- UNITS Seconds
       DESCRIPTION
           "A read-only variable indicating the maximum offset
            error due to skew of the local clock over the
            time interval 86400 seconds, in seconds."
       ::= { sspmGeneral 2 }


   sspmGeneralClockSource OBJECT-TYPE
       SYNTAX SspmClockSource
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "A read-only variable indicating the source of the clock.
            This is provided to allow a user to determine how accurate
            the timing mechanism is compared with other devices.  This
            is needed for the coordination of time values
            between probes for one-way measurements."
       ::= { sspmGeneral 3 }

   sspmGeneralMinFrequency OBJECT-TYPE
       SYNTAX     SspmMicroSeconds
       MAX-ACCESS read-only
       -- units   MicroSeconds
       STATUS     current
       DESCRIPTION
            "A read-only variable that indicates the devices'
             capability for the minimum supported
             sspmSourceFrequency.  If sspmSourceFrequency is
             set to a value lower than the value reported
             by this attribute, then the set of sspmSourceFrequency
             will fail with an inconsistent value error."
       ::= { sspmGeneral 4 }

   --
   -- sspmCapabilities
   --
   -- Describes the capabilities of the SSPM device.
   --
   sspmCapabilitiesTable OBJECT-TYPE
       SYNTAX       SEQUENCE OF SspmCapabilitiesEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "The table of SSPM capabilities."
       ::= { sspmGeneral 5 }

   sspmCapabilitiesEntry OBJECT-TYPE
       SYNTAX      SspmCapabilitiesEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Details about a particular SSPM capability."
       INDEX { sspmCapabilitiesInstance }
       ::= { sspmCapabilitiesTable 1 }

   SspmCapabilitiesEntry ::= SEQUENCE {
       sspmCapabilitiesInstance AppLocalIndex
       }

   sspmCapabilitiesInstance OBJECT-TYPE
       SYNTAX      AppLocalIndex
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "Indicates whether SSPM configuration of the corresponding
            AppLocalIndex is supported by this device.  Generally,
            entries in this table are only made by the device when the
            configuration of the measurement is available."
        ::= { sspmCapabilitiesEntry 1 }

   --
   -- sspmSource
   --
   -- Contains the details of the source of the
   -- Synthetic Sources for Performance Monitoring algorithms.
   -- This information is split into two tables.  The first defines
   -- profiles that can be applied to specific sources in the
   -- control table.
   --
   sspmSource           OBJECT IDENTIFIER ::= { sspmMIBObjects 2 }

   --
   -- sspmSourceProfileTable
   -- Defines template profiles for measurements.
   --
   sspmSourceProfileTable OBJECT-TYPE
       SYNTAX       SEQUENCE OF SspmSourceProfileEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "The table of SSPM Source Profiles configured."
       ::= { sspmSource 1 }

   sspmSourceProfileEntry OBJECT-TYPE
       SYNTAX      SspmSourceProfileEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Details about a particular SSPM Source Profile
            configuration.  Entries must exist in this table
            in order to be referenced by rows in the
            sspmSourceControlTable."
       INDEX { sspmSourceProfileInstance }
       ::= { sspmSourceProfileTable 1 }

   SspmSourceProfileEntry ::= SEQUENCE {
       sspmSourceProfileInstance           Unsigned32,
       sspmSourceProfileType               AppLocalIndex,
       sspmSourceProfilePacketSize         Unsigned32,
       sspmSourceProfilePacketFillType     INTEGER,
       sspmSourceProfilePacketFillValue    OCTET STRING,
       sspmSourceProfileTOS                Integer32,
       sspmSourceProfileFlowLabel          Integer32,
       sspmSourceProfileLooseSrcRteFill    OCTET STRING,
       sspmSourceProfileLooseSrcRteLen     Integer32,
       sspmSourceProfileTTL                Integer32,
       sspmSourceProfileNoFrag             TruthValue,
       sspmSourceProfile8021Tagging        Integer32,
       sspmSourceProfileUsername           Utf8String,
       sspmSourceProfilePassword           Utf8String,
       sspmSourceProfileParameter          OCTET STRING,
       sspmSourceProfileOwner              OwnerString,
       sspmSourceProfileStorageType        StorageType,
       sspmSourceProfileStatus             RowStatus
   }

   sspmSourceProfileInstance OBJECT-TYPE
       SYNTAX      Unsigned32 (1..65535)
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "An arbitrary index."
        ::= { sspmSourceProfileEntry 1 }

   sspmSourceProfileType OBJECT-TYPE
       SYNTAX      AppLocalIndex
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The AppLocalIndex value that uniquely identifies the
            measurement per the APM-MIB.  In order to create a row
            in this table, there must be a corresponding row in the
            sspmCapabilitiesTable.

            When attempting to set this object, if no
            corresponding row exists in the sspmCapabilitiesTable,
            then the agent should return a 'badValue' error."
       ::= { sspmSourceProfileEntry 2}

   sspmSourceProfilePacketSize OBJECT-TYPE
       SYNTAX      Unsigned32
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The size of packet to be transmitted in bytes.  The
            size accounts for all data within the IPv4 or IPv6
            payloads, excluding the IP headers, IP header options
            and link-level protocol headers.

            If the size is set smaller than the minimum allowed
            packet size or greater than the maximum allowed
            packet size, then the set should fail, and the agent
            should return a 'badValue' error."
       ::= { sspmSourceProfileEntry 3 }

   sspmSourceProfilePacketFillType OBJECT-TYPE
       SYNTAX      INTEGER {
                           random (1),
                           pattern (2),
                           url(3)
                   }
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Indicates how the packet is filled.

            'random' indicates that the packet contains random
            data patterns.  This is probe and implementation
            dependent.

            'pattern' indicates that the pattern defined in the
            sspmSourceProfilePacketFillValue attribute is used to
            fill the packet.

            'url' indicates that the value of
            sspmSourceProfilePacketFillValue should
            contain a URL.  The contents of the document
            at that URL are retrieved when sspmSourceStatus becomes
            active and utilized in the packet.  If the attempt to
            access that URL fails, then the row status is set to
            'notReady', and the set should fail with
            'inconsistentValue'.  This value must contain a
            dereferencable URL of the type 'http:', 'https:', or
            'ftp:' only."
       ::= { sspmSourceProfileEntry 4 }

   sspmSourceProfilePacketFillValue OBJECT-TYPE
       SYNTAX      OCTET STRING (SIZE(0..255))
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The string value with which to fill the packet.  If
            sspmSourceProfilePacketFillType is set to 'pattern',
            then this pattern is repeated until the packet is
            sspmSourcePacketSize in bytes.  Note that if the
            length of the octet string specified for this
            value does not divide evenly into the packet
            size, then an incomplete last copy of this data
            may be copied into the packet.  If the value of
            sspmSourceProfilePacketFillType is set to 'random', then
            this attribute is unused.  If the value of the
            sspmSourceProfilePacketFillType is set to 'url', then
            the URL specified in this attribute is retrieved
            and used by the probe.  In the case of a URL, this value
            must contain a dereferencable URL of the type
            'http:', 'https:', or 'ftp:' only."
       ::= { sspmSourceProfileEntry 5 }

   sspmSourceProfileTOS OBJECT-TYPE
       SYNTAX      Integer32 (0..255)
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Represents the TOS field in the IP packet header.  The
           value of this object defaults to zero if not set."
       DEFVAL { 0 }
       ::= { sspmSourceProfileEntry 6 }

   sspmSourceProfileFlowLabel OBJECT-TYPE
       SYNTAX      Integer32 (0..1048575) -- 20-bit range (0 to 0xfffff)
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "This object is used to specify the Flow Label in a IPv6
            packet (RFC 2460) to force special handling by the IPv6
            routers; e.g., non-default quality-of-service handling.

            This object is meaningful only when the object
            sspmSourceDestAddressType is IPv6(2).
            The value of this object defaults to zero if not set."
       DEFVAL { 0 }
       ::= { sspmSourceProfileEntry 7 }

   sspmSourceProfileLooseSrcRteFill OBJECT-TYPE
       SYNTAX      OCTET STRING (SIZE(0..240))
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "In the event that the test should run over a
            specific route, the intent is to force the route using the
            Loose Source Route option in IPv4 [RFC791] and
            IPv6 [RFC2460].  This object contains a
            series of IP addresses along the path that would be
            put into the loose source route option in the IP header.

            The IPv4 addresses are to be listed as 32-bit
            address values, and the IPv6 addresses are to be
            listed as a string of 128-bit addresses.  The
            maximum length allowed within the IPv4 source route
            option is 63 addresses.  To simply account for
            IPv6 addresses as well, the maximum length of the
            octet string is 240.  This allows up to 60
            IPv4 addresses or up to 15 IPv6 addresses in the
            string."
       ::= { sspmSourceProfileEntry 8 }

   sspmSourceProfileLooseSrcRteLen OBJECT-TYPE
       SYNTAX      Integer32(0..240)
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "In the event that the test should run over a
            specific route, the intent is to force the route.
            This attribute specifies the length of data to
            be copied from the sspmSourceProfileLooseSrcRteFill
            into the route data fields of the loose source route
            options in the IPv4 or IPv6 headers."
       ::= { sspmSourceProfileEntry 9 }

   sspmSourceProfileTTL OBJECT-TYPE
       SYNTAX      Integer32(1..255)
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
            "If non-zero, this specifies the value to place into
            the TTL field on transmission."
       ::= { sspmSourceProfileEntry 10 }

   sspmSourceProfileNoFrag OBJECT-TYPE
       SYNTAX      TruthValue
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "When true, the 'Don't Fragment Bit' should be set
            on the packet header."
       ::= { sspmSourceProfileEntry 11 }

   sspmSourceProfile8021Tagging OBJECT-TYPE
       SYNTAX      Integer32 (-1..65535)
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "IEEE 802.1Q tagging used in IEEE 802.1D bridged
           environments.

           A value of -1 indicates that the packets are untagged.

           A value of 0 to 65535 is the value of the tag to be
           inserted in the tagged packets.

           Note that according to IEEE 802.1Q, VLAN-ID tags with
           a value of 4095 shall not be transmitted on the wire.
           As the VLAN-ID is encoded in the 12 least significant
           bits on the tag, values that translate in a binary
           representation of all 1's in the last 12 bits
           SHALL NOT be configured.  In this case, the set should
           fail, and return an error-status of 'inconsistentValue'."
       ::= { sspmSourceProfileEntry 12 }

   sspmSourceProfileUsername OBJECT-TYPE
       SYNTAX      Utf8String
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "An optional username used by the application protocol."
       ::= { sspmSourceProfileEntry 13 }

   sspmSourceProfilePassword OBJECT-TYPE
       SYNTAX      Utf8String
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "An optional password used by the application protocol."
       ::= { sspmSourceProfileEntry 14 }

   sspmSourceProfileParameter OBJECT-TYPE
       SYNTAX      OCTET STRING (SIZE(0..65535))
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
            "An optional parameter used by the application protocol.
            For DNS, this would be the hostname or IP.  For HTTP,
            this would be the URL.  For nntp, this would be the
            news group.  For TCP, this would be the port number.
            For SMTP, this would be the recipient (and could
            assume the message is predefined)."
       ::= { sspmSourceProfileEntry 15 }

   sspmSourceProfileOwner OBJECT-TYPE
       SYNTAX      OwnerString
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Name of the management station/application that
           set up the profile."
       ::= { sspmSourceProfileEntry 16 }

   sspmSourceProfileStorageType OBJECT-TYPE
       SYNTAX      StorageType
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The storage type of this sspmSourceProfileEntry.  If the
           value of this object is 'permanent', no objects in this row
           need to be writable."
       ::= { sspmSourceProfileEntry 17 }

   sspmSourceProfileStatus OBJECT-TYPE
       SYNTAX      RowStatus
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Status of this profile.

           An entry may not exist in the active state unless all
           objects in the entry have an appropriate value.

           Once this object is set to active(1), no objects in the
           sspmSourceProfileTable can be changed."
       ::= { sspmSourceProfileEntry 18 }

   --
   -- sspmSourceControlTable
   -- Defines specific measurement instances based on template
   -- profiles in the sspmSourceProfileTable which must be
   -- pre-configured.
   --

   sspmSourceControlTable OBJECT-TYPE
       SYNTAX       SEQUENCE OF SspmSourceControlEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "The table of SSPM measurements configured."
       ::= { sspmSource 2 }

   sspmSourceControlEntry OBJECT-TYPE
       SYNTAX      SspmSourceControlEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "Details about a particular SSPM configuration."
       INDEX { sspmSourceControlInstance }
       ::= { sspmSourceControlTable 1 }

   SspmSourceControlEntry ::= SEQUENCE {
       sspmSourceControlInstance          Unsigned32,
       sspmSourceControlProfile           Integer32,
       sspmSourceControlSrc               InterfaceIndexOrZero,
       sspmSourceControlDestAddrType      InetAddressType,
       sspmSourceControlDestAddr          InetAddress,
       sspmSourceControlEnabled           TruthValue,
       sspmSourceControlTimeOut           SspmMicroSeconds,
       sspmSourceControlSamplingDist      INTEGER,
       sspmSourceControlFrequency         SspmMicroSeconds,
       sspmSourceControlFirstSeqNum       Unsigned32,
       sspmSourceControlLastSeqNum        Unsigned32,
       sspmSourceControlOwner             OwnerString,
       sspmSourceControlStorageType       StorageType,
       sspmSourceControlStatus            RowStatus
   }

   sspmSourceControlInstance OBJECT-TYPE
       SYNTAX      Unsigned32 (1..65535)
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "An arbitrary index."
        ::= { sspmSourceControlEntry 1 }

   sspmSourceControlProfile OBJECT-TYPE
       SYNTAX      Integer32 (1..65535)
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "A pointer to the profile (sspmSourceProfileEntry) that
            this control entry uses to define the test being
            performed."
        ::= { sspmSourceControlEntry 2 }

   sspmSourceControlSrc OBJECT-TYPE
       SYNTAX      InterfaceIndexOrZero
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The ifIndex where the packet should originate from the
            probe (if it matters).  A value of zero indicates that
            it does not matter and that the device decides."
       ::= { sspmSourceControlEntry 3 }

   sspmSourceControlDestAddrType OBJECT-TYPE
       SYNTAX      InetAddressType
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The type of Internet address by which the destination
            is accessed."
       ::= { sspmSourceControlEntry 4 }

   sspmSourceControlDestAddr OBJECT-TYPE
       SYNTAX      InetAddress
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The Internet address for the destination.  The formatting
           of this object is controlled by the
           sspmSourceControlDestAddrType object above.

           When this object contains a DNS name, then the name is
           resolved to an address each time measurement is to be made.
           Further, the agent should not cache this address,
           but instead should perform the resolution prior to each
           measurement."
       ::= { sspmSourceControlEntry 5 }

   sspmSourceControlEnabled OBJECT-TYPE
       SYNTAX      TruthValue
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "When set to 'true', this test is enabled.  When set to
            'false', it is disabled."
       ::= { sspmSourceControlEntry 6 }

   sspmSourceControlTimeOut OBJECT-TYPE
       SYNTAX      SspmMicroSeconds
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Timeout value for the measurement response.  If no
            response is received in the time specified, then
            the test fails."
       ::= { sspmSourceControlEntry 7 }

   sspmSourceControlSamplingDist OBJECT-TYPE
       SYNTAX      INTEGER {
                            deterministic(1),
                            poisson(2)
                   }
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "When this attribute is set to 'deterministic', then
            packets are generated at with a fixed inter-packet
            injection time specified by sspmSourceFrequency.

            When this attribute is set to 'Poisson', then packets
            are generated with inter-packet injection times sampled
            from an exponential distribution with the single
            distributional parameter determined by the inverse
            frequency)."
       ::= { sspmSourceControlEntry 8 }

   sspmSourceControlFrequency OBJECT-TYPE
       SYNTAX      SspmMicroSeconds
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The inverse of this value is the rate at which packets
            are generated.  Refer to sspmSourceSamplingDistribution.
            If the value set is less than the value of
            sspmGeneralMinFrequency, then the set will fail with an
            error-status of 'inconsistentValue'."
       ::= { sspmSourceControlEntry 9 }

   sspmSourceControlFirstSeqNum OBJECT-TYPE
       SYNTAX      Unsigned32
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The first sequence number of packets to be transmitted."
       ::= { sspmSourceControlEntry 10 }

   sspmSourceControlLastSeqNum OBJECT-TYPE
       SYNTAX      Unsigned32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "The last sequence number transmitted.  This value is updated
            by the agent after packet generation."
       ::= { sspmSourceControlEntry 11 }

   sspmSourceControlOwner OBJECT-TYPE
       SYNTAX      OwnerString
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Name of the management station/application that set
           up the test."
       ::= { sspmSourceControlEntry 12 }

   sspmSourceControlStorageType OBJECT-TYPE
       SYNTAX      StorageType
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The storage type of this sspmSourceControlEntry.  If the
           value of this object is 'permanent', no objects in this row
           need to be writable."
       ::= { sspmSourceControlEntry 13 }

   sspmSourceControlStatus OBJECT-TYPE
       SYNTAX      RowStatus
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Status of this source control entry.

           An entry may not exist in the active state unless all
           objects in the entry have an appropriate value.

           When this attribute has the value of
           'active', none of the read-write or read-create attributes
           in this table may be modified, with the exception of
           sspmSourceControlEnabled."
       ::= { sspmSourceControlEntry 14 }

   --
   -- sspmSinkTable
   --
   -- Contains attributes for configuration of Synthetic
   -- Sources for Performance Monitoring sinks, i.e.,
   -- sinks for receipt of one-way delay measurements.
   --
   sspmSink           OBJECT IDENTIFIER ::= { sspmMIBObjects 5 }

   sspmSinkTable OBJECT-TYPE
       SYNTAX       SEQUENCE OF SspmSinkEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "A table configuring the sink for measurements."
       ::= { sspmSink 1 }

   sspmSinkEntry OBJECT-TYPE
       SYNTAX      SspmSinkEntry
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "The details of a particular sink entry.  If the measurement
            is a round-trip type, then the sink entry will be on the
            same probe as the corresponding sspmSourceEntry.  If the
            measurement is a one-way, type then the sink entry will be
            on a different probe."
       INDEX { sspmSinkInstance }
       ::= { sspmSinkTable 1}

   SspmSinkEntry ::= SEQUENCE {
       sspmSinkInstance                       Unsigned32,
       sspmSinkType                           AppLocalIndex,
       sspmSinkSourceAddressType              InetAddressType,
       sspmSinkSourceAddress                  InetAddress,
       sspmSinkExpectedRate                   SspmMicroSeconds,
       sspmSinkEnable                         TruthValue,
       sspmSinkExpectedFirstSequenceNum       Unsigned32,
       sspmSinkLastSequenceNumber             Unsigned32,
       sspmSinkLastSequenceInvalid            Counter32,
       sspmSinkStorageType                    StorageType,
       sspmSinkStatus                         RowStatus
   }

   sspmSinkInstance OBJECT-TYPE
       SYNTAX      Unsigned32 (1..65535)
       MAX-ACCESS  not-accessible
       STATUS      current
       DESCRIPTION
           "An index.  When the measurement is for a round-trip
            measurement, then this table entry is on the same probe as
            the corresponding sspmSourceEntry, and the value of this
            attribute should correspond to the value of
            sspmSourceInstance.  Management applications configuring
            sinks for one-way measurements could define some
            scheme whereby the sspmSinkInstance is unique across
            all probes.  Note that the unique key to this entry is
            also constructed with sspmSinkType,
            sspmSinkSourceAddressType, and sspmSinkSourceAddress.
            To make the implementation simpler, those other
            attributes are not included in the index but uniqueness
            is still needed to receive all the packets."
        ::= { sspmSinkEntry 1 }

   sspmSinkType OBJECT-TYPE
       SYNTAX      AppLocalIndex
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The AppLocalIndex value that uniquely identifies the
            measurement per the APM-MIB.  In order to create a row
            in this table, there must be a corresponding row in the
            sspmCapabilitiesTable.  If there is no corresponding
            row in the sspmCapabilitiestable, then the agent will
            return an error-status of 'inconsistentValue'."
       ::= { sspmSinkEntry 2}

   sspmSinkSourceAddressType OBJECT-TYPE
       SYNTAX      InetAddressType
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The type of Internet address of the source."
       ::= { sspmSinkEntry 3 }

   sspmSinkSourceAddress OBJECT-TYPE
       SYNTAX      InetAddress
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The Internet address of the source.  The formatting
           of this object is controlled by the sspmSinkSourceAddressType
           object above.

           This object should be set only to a valid device address
           that has been administratively configured into the
           device.  If a set attempts to set this object to an
           address that does not belong (i.e., is not administratively
           configured into the device), the set should fail, and the
           agent should return a error-status of 'inconsistentValue'."
       ::= { sspmSinkEntry 4 }

   sspmSinkExpectedRate OBJECT-TYPE
       SYNTAX      SspmMicroSeconds
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The expected rate at which packets will arrive."
       ::= { sspmSinkEntry 5 }

   sspmSinkEnable OBJECT-TYPE
       SYNTAX      TruthValue
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "Indicates if the sink is enabled or not."
       ::= { sspmSinkEntry 6 }

   sspmSinkExpectedFirstSequenceNum OBJECT-TYPE
       SYNTAX      Unsigned32
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The expected first sequence number of packets.
            This is used by the sink to determine if packets
            were lost at the initiation of the test."
       ::= { sspmSinkEntry 7 }

   sspmSinkLastSequenceNumber OBJECT-TYPE
       SYNTAX      Unsigned32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "The last sequence number received."
       ::= { sspmSinkEntry 8 }

   sspmSinkLastSequenceInvalid OBJECT-TYPE
       SYNTAX      Counter32
       MAX-ACCESS  read-only
       STATUS      current
       DESCRIPTION
           "The number of packets that arrived whose
            sequence number was not one plus the value of
            sspmSinkLastSequenceNumber."
       ::= { sspmSinkEntry 9 }

   sspmSinkStorageType OBJECT-TYPE
       SYNTAX      StorageType
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
           "The storage type of this sspmSinkEntry.  If the value
           of this object is 'permanent', no objects in this row
           need to be writable."
       ::= { sspmSinkEntry 10 }

   sspmSinkStatus OBJECT-TYPE
       SYNTAX       RowStatus
       MAX-ACCESS  read-create
       STATUS      current
       DESCRIPTION
            "Status of this conceptual row.
            An entry may not exist in the active state unless all
            objects in the entry have an appropriate value.

            Once this object is set to active(1), no objects with
            MAX-ACCESS of read-create in the sspmSinkTable can
            be changed."
       ::= { sspmSinkEntry 11 }

   --
   -- Notifications
   --

   --
   -- Conformance information
   --
   sspmCompliances OBJECT IDENTIFIER ::= { sspmMIBConformance 1 }
   sspmGroups      OBJECT IDENTIFIER ::= { sspmMIBConformance 2 }

   -- Compliance Statements
   sspmGeneralCompliance MODULE-COMPLIANCE
     STATUS current
     DESCRIPTION
       "A general compliance that allows all things to be optional."
     MODULE -- this module

     MANDATORY-GROUPS { sspmGeneralGroup }

     GROUP sspmSourceGroup
     DESCRIPTION
       "The SSPM Source Group is optional."

     GROUP sspmSinkGroup
     DESCRIPTION
       "The SSPM Sink Group is optional."

     GROUP sspmUserPassGroup
     DESCRIPTION
       "The SSPM User Pass Group is optional."

     ::= { sspmCompliances 1 }

   --
   -- SSPM Source Compliance
   --
   sspmSourceFullCompliance MODULE-COMPLIANCE
     STATUS current
     DESCRIPTION
       "A source compliance.  Use this compliance when implementing
        a traffic-source-only device.  This is useful for implementing
        devices that probe other devices for intrusive application
        monitoring.  It is also useful for implementing the source
        of one-way tests used with a sink-only device."
     MODULE -- this module

     MANDATORY-GROUPS { sspmGeneralGroup, sspmSourceGroup }

     GROUP sspmUserPassGroup
     DESCRIPTION
       "The SSPM User Pass Group is optional."
     ::= { sspmCompliances 2 }

   --
   -- SSPM Sink Compliance
   --
   sspmSinkFullCompliance MODULE-COMPLIANCE
     STATUS current
     DESCRIPTION
       "A sink-only compliance.  Use this compliance when implementing a
        sink-only device.  This is useful for devices to receive one-way
        measurements."
     MODULE -- this module

     MANDATORY-GROUPS { sspmGeneralGroup, sspmSinkGroup }

     ::= { sspmCompliances 3 }

   --
   -- Groups
   --
   sspmGeneralGroup OBJECT-GROUP
       OBJECTS {
       sspmGeneralClockResolution,
       sspmGeneralClockMaxSkew,
       sspmGeneralClockSource,
       sspmGeneralMinFrequency,
       sspmCapabilitiesInstance
       }
       STATUS      current
       DESCRIPTION
           "The objects in the SSPM General Group."
       ::= { sspmGroups 1 }

   sspmSourceGroup OBJECT-GROUP
       OBJECTS {
       sspmSourceProfileType,
       sspmSourceProfilePacketSize,
       sspmSourceProfilePacketFillType,
       sspmSourceProfilePacketFillValue,
       sspmSourceProfileTOS,
       sspmSourceProfileFlowLabel,
       sspmSourceProfileLooseSrcRteFill,
       sspmSourceProfileLooseSrcRteLen,
       sspmSourceProfileTTL,
       sspmSourceProfileNoFrag,
       sspmSourceProfile8021Tagging,
       sspmSourceProfileUsername,
       sspmSourceProfilePassword,
       sspmSourceProfileParameter,
       sspmSourceProfileOwner,
       sspmSourceProfileStorageType,
       sspmSourceProfileStatus,
       sspmSourceControlProfile,
       sspmSourceControlSrc,
       sspmSourceControlDestAddrType,
       sspmSourceControlDestAddr,
       sspmSourceControlEnabled,
       sspmSourceControlTimeOut,
       sspmSourceControlSamplingDist,
       sspmSourceControlFrequency,
       sspmSourceControlFirstSeqNum,
       sspmSourceControlLastSeqNum,
       sspmSourceControlOwner,
       sspmSourceControlStorageType,
       sspmSourceControlStatus
       }
       STATUS      current
       DESCRIPTION
           "The objects in the SSPM Source Group."
       ::= { sspmGroups 2 }

   sspmUserPassGroup OBJECT-GROUP
       OBJECTS {
       sspmSourceProfileUsername,
       sspmSourceProfilePassword
       }
       STATUS      current
       DESCRIPTION
           "The objects in the SSPM Username and password group."
       ::= { sspmGroups 3 }

   sspmSinkGroup OBJECT-GROUP
       OBJECTS {
       sspmSinkType,
       sspmSinkSourceAddressType,
       sspmSinkSourceAddress,
       sspmSinkExpectedRate,
       sspmSinkEnable,
       sspmSinkExpectedFirstSequenceNum,
       sspmSinkLastSequenceNumber,
       sspmSinkLastSequenceInvalid,
       sspmSinkStorageType,
       sspmSinkStatus
       }
       STATUS      current
       DESCRIPTION
           "The objects in the SSPM Sink Group."
       ::= { sspmGroups 4 }

   END